﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SharpOSCAR.Snac
{
    /// <summary>
    /// Commands sent through SNAC are split up into FOODGROUPS
    /// </summary>
    public enum SNAC__FOODGROUPS : ushort
    {
        /// <summary>
        /// The OSERVICE foodgroup contains basic operations and data types that are
        /// common across many of the foodgroups and even different servers. It is also
        /// used for service requests when the client needs to connect to a second server
        /// to perform some other action. 
        /// </summary>
        OSERVICE = 1,
        /// <summary>
        /// The PD foodgroup is used for the control of Permit/Deny settings for the user 
        /// </summary>
        PD = 9,
        /// <summary>
        /// ICBM, or Inter Client Basic Message, is a foodgroup focused around protocol
        /// messages that are sent between users or clients. 
        /// </summary>
        ICBM = 4,
        /// <summary>
        /// This is the foodgroup for inviting users to join AIM. 
        /// </summary>
        INVITE = 6,
        /// <summary>
        /// The BUDDY foodgroup is used to send clients notifications about the state 
        /// of other users in their Buddy List. This can also include information about
        /// other users that the client has expressed a temporary interest in. These
        /// temporary interests are only valid for the duration of the client's session. 
        /// </summary>
        BUDDY = 3,
        /// <summary>
        /// A Feedbag is the stored Buddy List and server based preferences for an AIM user.
        /// The client has direct access to manipulate the Feedbag in any way it sees fit, 
        /// including corrupting it. The server has some checks in place to prevent destruction, 
        /// but a client developer must be careful not to corrupt things.
        /// </summary>
        /// <remarks>
        /// Class
        /// All the entries in the Feedbag are assigned a class, which defines the characteristics 
        /// of how they should behave. The class is represented by a numeric classId with each entry. 
        /// 
        /// Item
        /// An item is a generic term that is used for any entry that can be added to a user's Feedbag.
        /// An item can be a group, a Buddy, a preference, a permit/deny entry, or anything else. 
        /// All items have a name (which can be empty), a groupId, an itemId, a classId, and 
        /// attributes with groupId and itemId being unique. The groupId and itemId can have 
        /// values between 0 and 32767; values between 32768 and 65535 are reserved. The client 
        /// is responsible for picking new groupId and itemIds. 
        /// 
        /// Group
        /// A group is a special type of item that is always represented by using an itemId of 0 
        /// and classId of GROUP. All items live inside of a group, with items that use a groupId of 0 
        /// being called in the Root Group. All group items have an ORDER attribute that describes how 
        /// the items in the group should be ordered, since the order in Feedbag can be random. 
        /// </remarks>
        FEEDBAG = 19,
        /// <summary>
        /// BART is the system that the AIM clients use to download expressions for their buddies
        /// and themselves. Examples of BART items include Buddy icons, Buddy arrival sounds,
        /// and immersive wallpapers. 
        /// </summary>
        /// <remarks>
        /// For some items, the actual assets are downloaded using the BART system and in other cases,
        /// just descriptive XML files are used. Once a BART item is downloaded, it is basically cached
        /// FOREVER by the client, so updating requires publishing a new BART item. This is especially
        /// important when the BART item is an asset.
        /// When the BART item is a descriptive XML file, only the XML file is cached forever and
        /// any assets it refers to can use different caching schemes determined by the client. 
        /// 
        /// All BART items are represented by a BART ID. A BART ID is a 5 byte to 20 byte binary value
        /// that represents the BART item and is sent around by the client and the servers. One simple
        /// way to think of the BART ID is as a compressed URL. When the client receives a BART ID,
        /// either from another client or from the server, it checks its cache or uses the BART server
        /// to download the item. The BART server also has a cache and connects to the various partners
        /// to download the assets if it does not have them. It is expected that each BART ID points to
        /// a unique item. The backend will collapse duplicate items into a single ID. The BART server
        /// also will store custom items for some asset types. 
        /// 
        /// Having a Buddy icon with opaque data of 0x0201d20472 means the user has explicitly chosen to
        /// have no Buddy icon. This is different then not having a Buddy icon. This ID should be treated
        /// specially and does not need to be fetched from BART (although BART will return an empty GIF).
        /// This was done so clients could tell when they upgraded from old style Buddy icons to BART
        /// Buddy icons. This special ID should NOT be used for other BART types. 
        /// </remarks>
        BART = 16,
        /// <summary>
        /// The LOCATE foodgroup allows the discovery and setting of personalization features such as AIM
        /// signatures and away messages. The AIM signature has been surfaced under many different names
        /// in AIM products, such as AIM Profile, AIM Buddy Info, and AIM Get Info. 
        /// </summary>
        LOCATE = 2
    }
}
